package formal.array;

import java.util.Arrays;

/**
 * @author DengYuan2
 * @create 2021-02-07 20:02
 */
public class M_667 {
    public static void main(String[] args) {
        int n = 9;
        int k = 5;
        int[] res = constructArray(n, k);
        System.out.println(Arrays.toString(res));

    }

    /**
     * 我不会
     * 大神思路：让前k+1个元素构建出k个不相同的差值，序列为：1 k+1 2 k 3 k-1 ... k/2 k/2+1
     * 按照大神的思路，我是这么写的，但其实没有get到真正的思路啊
     * 其实，应该是: 1 前者+k 前者-(k-1) 前者+(k-2) 前者-(k-3)
     *
     * @param n
     * @param k
     * @return
     */
    public static int[] constructArray(int n, int k) {
        int[] res = new int[n];
        if (k > n - 1) {
            return null;
        }
        int j = 1;
        for (int i = 0; i <= k; i++) {
            if (i % 2 == 0) {
                res[i] = i / 2 + 1;
            } else {
                res[i] = k + j;
                j--;
            }

        }
        for (int i = k + 1; i < n; i++) {
            res[i] = i + 1;
        }
        return res;
    }

    /**
     * 大神的写法
     * 1 前者+k 前者-(k-1) 前者+(k-2) 前者-(k-3)
     * @param n
     * @param k
     * @return
     */
    public static int[] constructArray2(int n, int k) {
        int[] res = new int[n];
        res[0] = 1;
        for (int i = 1, j = k; i <= k; i++, j--) {
            res[i] = (i % 2 == 1) ? res[i - 1] + j : res[i - 1] - j;
        }
        for (int i = k + 1; i < n; i++) {
            res[i] = i + 1;
        }
        return res;
    }


}
